package cn.sxt.userscenter.common.util;

import java.io.InputStream;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.annotation.Resource;

import org.springframework.stereotype.Component;

/**
 * 正则表达式工具类
 * @author Administrator
 *
 */
@Component("regexUtil")
public class RegexUtil {
	@Resource
	private FileUtil fileUtil ; 
	
	/* 正则表达式 ,通过小括号分组*/
	private String patt = "(\\$\\{)(\\w+)(\\})";
	
	/**
	 * 原始字符串:测试一下${a},再${b}来
	 * 结果字符串:测试一下值a,再值b来
	 * 
	 * @param souStr
	 * @param paramsMap
	 * @return	${与map的键对应}
	 */
	public String repaceStr(String souStr , Map<String, Object> paramsMap)
	{
		/*ConstatFinalUtil.LOGGER.info("------");*/
		/* 编译正则表达式 */
		Pattern pattern = Pattern.compile(patt);
		/* 获取匹配器 */
		Matcher matcher = pattern.matcher(souStr);
		/*boolean flag = matcher.matches() ;*/
		
		StringBuffer sb = new StringBuffer() ; 
		/* 循环匹配 */
		while(matcher.find())
		{
			/* 正则表达式匹配的结果取第2组 */
			String res = matcher.group(2);
			/* 如果map中包含键,就将键对应的值替换 */
			if(paramsMap.containsKey(res))
			{
				matcher.appendReplacement(sb, paramsMap.get(res) + "");
			}
			/*System.out.println("--->" + res);*/
		}
		/* 加上尾巴 */
		matcher.appendTail(sb);
		/*System.out.println("-----" + sb);*/
		return sb.toString() ;
	}
	
	/**
	 * ~读取fileName对应的文件内容
	 * ~将文件内容中对应的${},替换为map中对应的信息
	 * @param fileName
	 * @return
	 */
	public String replaceFile(String fileName,Map<String, Object> paramsMap)
	{
		/*~读取fileName对应的文件内容*/
		/* 从Class对应的Class加载器(classpath)找对应的文件
		 * 可以从jar包中读取文件
		 *  */
		InputStream is = ConstatFinaUtil.class.getClassLoader().getResourceAsStream(fileName);
		String fileContent = this.fileUtil.readFile(is);
		
		/*~将文件内容中对应的${},替换为map中对应的信息*/
		return this.repaceStr(fileContent, paramsMap);
	}
}
